package view.interfaces;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.text.MaskFormatter;

import Util.Constants;
import business.dao.EstoqueDAO;
import business.dao.ProdutoDAO;
import business.model.EstoqueTO;
import business.model.ProdutoTO;
import exception.BusinessException;
import exception.InterfaceException;
import exception.UsuarioException;

public class telaAddEstoque extends JFrame {

	private JPanel contentPane;
	private JTextField textQuantidade;
	private JTextField textTotal;
	private JFormattedTextField textDataValidade;
	private EstoqueDAO EstoqueDAO = new EstoqueDAO();
	private ProdutoDAO produtoDAO = new ProdutoDAO();
	private JComboBox produtos;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					telaAddEstoque frame = new telaAddEstoque();
					frame.setVisible(true);
					frame.listarcombo();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public void listarcombo() {
		// TODO Auto-generated method stub
		List<ProdutoTO> produtoTOs;
		try {
			produtoTOs = produtoDAO.listar(null);
			for (ProdutoTO produtoTO : produtoTOs) {
				produtos.addItem(produtoTO);

			}
		} catch (UsuarioException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BusinessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterfaceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * Create the frame.
	 */
	public telaAddEstoque() {
		setTitle("Estoque");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 405, 354);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);

		JPanel panel_dados = new JPanel();
		panel_dados.setBorder(new LineBorder(new Color(0, 0, 0)));

		JTextPane txtpnNome = new JTextPane();
		txtpnNome.setEditable(false);
		txtpnNome.setBackground(SystemColor.control);
		txtpnNome.setText("Nome:");

		produtos = new JComboBox();
		produtos.setModel(new DefaultComboBoxModel(new String[] { "" }));

		JTextPane txtpnQuantidade = new JTextPane();
		txtpnQuantidade.setEditable(false);
		txtpnQuantidade.setBackground(SystemColor.control);
		txtpnQuantidade.setText("Quantidade:");

		JTextPane txtpnValorUnitrio = new JTextPane();
		txtpnValorUnitrio.setEditable(false);
		txtpnValorUnitrio.setBackground(SystemColor.control);
		txtpnValorUnitrio.setText("Valor Unit\u00E1rio");

		JTextPane txtpnTotal = new JTextPane();
		txtpnTotal.setEditable(false);
		txtpnTotal.setBackground(SystemColor.control);
		txtpnTotal.setText("Total:");

		JTextPane txtpnDataDeValidade = new JTextPane();
		txtpnDataDeValidade.setEditable(false);
		txtpnDataDeValidade.setBackground(SystemColor.control);
		txtpnDataDeValidade.setText("Data de Validade:");

		textQuantidade = new JTextField();
		textQuantidade.setColumns(10);

		final JTextField textValorUnitario = new JTextField();
		textValorUnitario.setColumns(10);

		textTotal = new JTextField();
		textTotal.setColumns(10);

		final JFormattedTextField textDataValidade = new JFormattedTextField(
				(setMascara("##/##/####")));
		textDataValidade.setColumns(10);

		GroupLayout gl_panel_dados = new GroupLayout(panel_dados);
		gl_panel_dados.setHorizontalGroup(gl_panel_dados.createParallelGroup(
				Alignment.LEADING).addGroup(
				gl_panel_dados
						.createSequentialGroup()
						.addContainerGap()
						.addGroup(
								gl_panel_dados
										.createParallelGroup(Alignment.LEADING)
										.addComponent(txtpnNome,
												GroupLayout.PREFERRED_SIZE,
												GroupLayout.DEFAULT_SIZE,
												GroupLayout.PREFERRED_SIZE)
										.addComponent(txtpnQuantidade,
												GroupLayout.PREFERRED_SIZE,
												GroupLayout.DEFAULT_SIZE,
												GroupLayout.PREFERRED_SIZE)
										.addComponent(txtpnValorUnitrio,
												GroupLayout.PREFERRED_SIZE,
												GroupLayout.DEFAULT_SIZE,
												GroupLayout.PREFERRED_SIZE)
										.addComponent(txtpnTotal,
												GroupLayout.PREFERRED_SIZE,
												GroupLayout.DEFAULT_SIZE,
												GroupLayout.PREFERRED_SIZE)
										.addComponent(txtpnDataDeValidade,
												GroupLayout.PREFERRED_SIZE,
												GroupLayout.DEFAULT_SIZE,
												GroupLayout.PREFERRED_SIZE))
						.addGap(72)
						.addGroup(
								gl_panel_dados
										.createParallelGroup(Alignment.LEADING)
										.addComponent(produtos, 0, 176,
												Short.MAX_VALUE)
										.addComponent(textQuantidade,
												GroupLayout.DEFAULT_SIZE, 176,
												Short.MAX_VALUE)
										.addComponent(textTotal,
												GroupLayout.DEFAULT_SIZE, 176,
												Short.MAX_VALUE)
										.addComponent(textDataValidade,
												GroupLayout.DEFAULT_SIZE, 176,
												Short.MAX_VALUE)
										.addComponent(textValorUnitario,
												Alignment.TRAILING,
												GroupLayout.DEFAULT_SIZE, 176,
												Short.MAX_VALUE)).addGap(22)));
		gl_panel_dados
				.setVerticalGroup(gl_panel_dados
						.createParallelGroup(Alignment.LEADING)
						.addGroup(
								gl_panel_dados
										.createSequentialGroup()
										.addGap(18)
										.addGroup(
												gl_panel_dados
														.createParallelGroup(
																Alignment.TRAILING)
														.addComponent(
																txtpnNome,
																GroupLayout.PREFERRED_SIZE,
																20,
																GroupLayout.PREFERRED_SIZE)
														.addComponent(
																produtos,
																GroupLayout.PREFERRED_SIZE,
																GroupLayout.DEFAULT_SIZE,
																GroupLayout.PREFERRED_SIZE))
										.addPreferredGap(
												ComponentPlacement.UNRELATED)
										.addGroup(
												gl_panel_dados
														.createParallelGroup(
																Alignment.LEADING,
																false)
														.addGroup(
																gl_panel_dados
																		.createSequentialGroup()
																		.addComponent(
																				txtpnQuantidade,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED)
																		.addComponent(
																				txtpnValorUnitrio,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED)
																		.addComponent(
																				txtpnTotal,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED)
																		.addComponent(
																				txtpnDataDeValidade,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE))
														.addGroup(
																gl_panel_dados
																		.createSequentialGroup()
																		.addComponent(
																				textQuantidade,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED)
																		.addComponent(
																				textValorUnitario,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED)
																		.addComponent(
																				textTotal,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED,
																				GroupLayout.DEFAULT_SIZE,
																				Short.MAX_VALUE)
																		.addComponent(
																				textDataValidade,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)))
										.addGap(85)));
		panel_dados.setLayout(gl_panel_dados);

		JPanel panel_botoes = new JPanel();

		JLabel lblTitulo = new JLabel("Adicionar Produto em Estoque");
		lblTitulo.setFont(new Font("Tahoma", Font.BOLD, 14));

		JButton btnVoltar = new JButton("VOLTAR");
		btnVoltar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new telaAdministrador().setVisible(true);
				setVisible(false);
			}
		});
		btnVoltar.setFont(new Font("Tahoma", Font.BOLD, 12));
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(gl_contentPane
				.createParallelGroup(Alignment.LEADING)
				.addComponent(panel_dados, GroupLayout.PREFERRED_SIZE, 379,
						GroupLayout.PREFERRED_SIZE)
				.addComponent(panel_botoes, GroupLayout.DEFAULT_SIZE, 379,
						Short.MAX_VALUE)
				.addGroup(
						gl_contentPane.createSequentialGroup()
								.addContainerGap().addComponent(lblTitulo)
								.addGap(67).addComponent(btnVoltar)
								.addContainerGap()));
		gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(
				Alignment.TRAILING)
				.addGroup(
						gl_contentPane
								.createSequentialGroup()
								.addContainerGap()
								.addGroup(
										gl_contentPane
												.createParallelGroup(
														Alignment.BASELINE)
												.addComponent(btnVoltar)
												.addComponent(lblTitulo))
								.addPreferredGap(ComponentPlacement.RELATED,
										21, Short.MAX_VALUE)
								.addComponent(panel_dados,
										GroupLayout.PREFERRED_SIZE, 183,
										GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(ComponentPlacement.RELATED)
								.addComponent(panel_botoes,
										GroupLayout.PREFERRED_SIZE, 62,
										GroupLayout.PREFERRED_SIZE)));

		JButton btnSalvar = new JButton("SALVAR");
		btnSalvar.setFont(new Font("Tahoma", Font.BOLD, 12));
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					EstoqueDAO estoqueDAO = new EstoqueDAO();
					EstoqueTO to = new EstoqueTO();
					to.setProduto((ProdutoTO) produtos.getSelectedItem());
					to.setQuantidade(Integer.parseInt(textQuantidade.getText()));
					to.setValorUnitario(Double.parseDouble(textValorUnitario
							.getText()));
					to.setValorTotal(Double.parseDouble(textTotal.getText()));

					SimpleDateFormat formato = new SimpleDateFormat(
							"dd/MM/yyyy");

					java.sql.Date DataValidade;
					try {
						DataValidade = new java.sql.Date(formato.parse(
								textDataValidade.getText()).getTime());
					} catch (ParseException ex) {
						DataValidade = null;
					}
					to.setDataValidade(DataValidade);

					estoqueDAO.incluir(to);

					textQuantidade.setText("");
					textValorUnitario.setText("");
					textTotal.setText("");
					textDataValidade.setText("");

				} catch (BusinessException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (UsuarioException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (InterfaceException e1) {
					// TODO Auto-generated catch block
					JOptionPane.showMessageDialog(rootPane, e1.getMessage(),
							Constants.Telas.TELA_CLIENTE,
							e1.getJOptionPaneType());
				}
			}

		});

		JButton btnDeletar = new JButton("DELETAR");
		btnDeletar.setFont(new Font("Tahoma", Font.BOLD, 12));
		btnDeletar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				EstoqueTO to = new EstoqueTO();

				try {
					to.setProduto((ProdutoTO) produtos.getSelectedItem());
					EstoqueDAO.excluir(to);

					textQuantidade.setText("");
					textValorUnitario.setText("");
					textTotal.setText("");
					textDataValidade.setText("");

				} catch (UsuarioException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (BusinessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InterfaceException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});

		GroupLayout gl_panel_botoes = new GroupLayout(panel_botoes);
		gl_panel_botoes.setHorizontalGroup(gl_panel_botoes.createParallelGroup(
				Alignment.TRAILING).addGroup(
				Alignment.LEADING,
				gl_panel_botoes
						.createSequentialGroup()
						.addGap(59)
						.addComponent(btnSalvar, GroupLayout.PREFERRED_SIZE,
								101, GroupLayout.PREFERRED_SIZE)
						.addGap(47)
						.addComponent(btnDeletar, GroupLayout.PREFERRED_SIZE,
								112, GroupLayout.PREFERRED_SIZE)
						.addContainerGap(60, Short.MAX_VALUE)));
		gl_panel_botoes.setVerticalGroup(gl_panel_botoes.createParallelGroup(
				Alignment.TRAILING)
				.addGroup(
						Alignment.LEADING,
						gl_panel_botoes
								.createSequentialGroup()
								.addGap(20)
								.addGroup(
										gl_panel_botoes
												.createParallelGroup(
														Alignment.BASELINE)
												.addComponent(btnDeletar)
												.addComponent(btnSalvar))
								.addContainerGap(19, Short.MAX_VALUE)));
		panel_botoes.setLayout(gl_panel_botoes);
		contentPane.setLayout(gl_contentPane);
	}

	private MaskFormatter setMascara(String mascara) {
		MaskFormatter mask = null;
		try {
			mask = new MaskFormatter(mascara);
		} catch (java.text.ParseException ex) {
		}
		return mask;
	}
}
